#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

//67. 二进制求和
//给你两个二进制字符串 a 和 b ，以二进制字符串的形式返回它们的和。

//将字符串逆置
void Reverse(char *str)
{
    int n=strlen(str);
    for(int i=0;i<n/2;i++){
        char tmp=str[i];
        str[i]=str[n-i-1];
        str[n-i-1]=tmp;
    }
}

char* addBinary(char* a, char* b) 
{
    Reverse(a);
     Reverse(b);
    int len_a = strlen(a),len_b = strlen(b);
    int n = fmax(len_a,len_b);
    int carry = 0;
    //由于进位缘故，新字符串可能比原最长字符串长度大1，同时需要一位空间存放'\0'
    //所以长度为n+2
    char *ans = (char*) malloc (sizeof(char) * (n+2));
    for(int i= 0; i < n; i++)
    {
        int n1 = i < len_a ? a[i]-48 : 0;
        int n2 = i < len_b ? b[i]-48 : 0;//利用ascall将字符转数字
        ans[i]=(n1 + n2 + carry)%2 +48;
        carry=(n1+n2+carry)/2;
    }
    if(carry!=0)
        ans[n++]='1';
    ans[n]='\0';
    Reverse(ans);
    return ans; 

}





int main()
{
    char *a = "11";
    char *b = "1";
    printf("%s",addBinary(a,b));
}